package com.example.innospace.demos.pojo.Request;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.util.StdConverter;


@JsonSerialize(converter = RequestType.RequestTypeToStringConverter.class)
@JsonDeserialize(converter = RequestType.StringToRequestTypeConverter.class)
public enum RequestType {
    PROJECT_MODIFICATION, // 项目修改申请
    MEMBER_CHANGE, // 成员变更申请
    FIRST_TEACHER_CHANGE, // 第一指导老师变更申请
    SECOND_TEACHER_CHANGE, // 第二指导老师变更申请
    COLLEGE_REVIEW, // 学院审核申请
    SCHOOL_REVIEW, // 学校审核申请
    DELETE_PROJECT, // 删除项目申请
    MODIFY_PROJECT_LEVEL, // 修改项目级别申请
    MID_TERM_REVIEW, // 项目中期审核申请

    MID_TERM_EXTENSION; // 中期延期申请类型

    private String description;
    // 自定义反序列化方法
    // 自定义反序列化方法
    @JsonCreator
    public static RequestType fromString(String value) {
        try {
            return RequestType.valueOf(value);
        } catch (IllegalArgumentException e) {
            throw new IllegalArgumentException("Invalid RequestType value: " + value);
        }
    }

    // 自定义序列化方法，将枚举转换为字符串
    public static class RequestTypeToStringConverter extends StdConverter<RequestType, String> {
        @Override
        public String convert(RequestType requestType) {
            return requestType.name();
        }
    }

    // 自定义反序列化方法，将字符串转换为枚举
    public static class StringToRequestTypeConverter extends StdConverter<String, RequestType> {
        @Override
        public RequestType convert(String value) {
            return fromString(value);
        }
    }
}